home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 June: Reference Library / Dev.CD Jun 99 RL Disk 1.toast / Technical Documentation / Macintosh Technotes and Q&As / technotes / tn / tn_1052.cw < prev    next >
Encoding:
Text File  |  1997-12-10  |  48.8 KB  |  663 lines  |  [TEXT/R*ch]

  1. ıBOBOı‰√dHZHZHZ‹
  2. ıˆLÿÿH˙ßTbB    ÿÿı‰ÿ-Z ÿÿÿ
  3. Ingrid KellyxHHÚ(ÿáÿáùEG(üHHØ(d'`Δÿÿıè› Â-)ÀÃÏÏ√ Ì˙ßDı˙˛ı˙˛””ƒÌÏÃ˙˚ÿñÎıæ°¯—R ı‚ü! ÿÿÿÿÿÿÿÿI'ÙDSET• à
  4. >€Ùıôı‚Üı‚ôı‰h°Rı‰@G…°Rıèp$H
  5. ^°Rı‚‹#LŰRƒ°%N °Rƒ¨(R•°Rƒ›'R!ì°Rƒ‰%R)°Rıè‹'L0 °Rƒ¸0@72°Rıè !6    >°Rƒ˛I
  6.  ()))    ) *a    b    cIŒ Ú ı ƒ¶·ƒf⁄©    ªÃÄÙö    ÷+b,    º,    »c
  7. ≈c b, c, d, e, f, g, h, i, j, k, l, ©, ªi ≈, … ˚     ˝,
  8. ,
  9. ,
  10. ,
  11. ,
  12. 9,
  13. :,≥,Å,Æ,‹,Ñ,,    ,Ê,Ë,Ô,Õ,    ,
  14. ,cABHcd∑∫Ô5ûC<C•i∫5≤¿Õètu ¡6I[•‚€¥U`s∑+¢Âßê•5 « î5!ï"#5"¬$g%8F&˘'1'\5((85(Ç)))9>)}>)Ô>***+*ò+++}+Ë,,],˚,ê5727ˆ57ÿ<88å8ø8ù:≠;÷=7==S=AS=˝S=ÄS=ÿ>V>    >    >T
  15. ,à
  16. à     ]  àa
  17. 
  18. c
  19. [q
  20. à^™
  21. `≠
  22. [Œ
  23. T©·
  24. ip
  25. ı 0ƒÓµõ1¶Õ2·
  26. ƒ
  27. ù
  28. 
  29. .
  30. 
  31. ∏
  32. Ù
  33. è
  34. ⁄à©
  35. 
  36. ª
  37. ÄÓ!Ùà%ö
  38. 
  39. ÷Ó.÷-
  40. ;a
  41. Eb
  42. Bh
  43. B    ?
  44. B    •
  45. B    ’•
  46. f    »
  47. d #
  48. d H
  49. d b•
  50. U g
  51. B l
  52. _ s
  53. b t
  54. a ª
  55. k ≈
  56. a …à% ˚
  57. 
  58. ˝
  59. B
  60. àç
  61. 
  62. B
  63. &
  64. 9
  65. B≥æÅ
  66. aÆ àçÏ
  67. a‹
  68. BÒ&
  69. BÊ
  70. aË àçÔ
  71. BÖ&    
  72. Bc
  73. B
  74. àhG
  75. c
  76. dÓ≥Ó"∑
  77. 3∫
  78. ö
  79. C
  80. Œ
  81. Ô#û:
  82. 3•
  83. àj∑
  84. k∫
  85. X
  86. s
  87. ≤
  88. ¿
  89. Ê
  90. DË
  91. Ï
  92. D‹
  93. æ
  94. Dç
  95. õ
  96. Dö
  97. ú
  98. Dû
  99.  
  100. D
  101. 
  102. 
  103. D
  104. 
  105. 
  106. 9
  107. T
  108. t
  109. u
  110. •
  111. D™
  112. —
  113. D‘
  114.  
  115. ¡
  116. 6àèI
  117. 
  118. •
  119. Ω
  120. D√
  121. ˙
  122. D˚
  123. €
  124. ¥
  125. f
  126. `
  127. ˜
  128. n˚
  129. ï
  130. à
  131. ì
  132. •? ª
  133. H «
  134.  î= ï#!19!2#!î
  135. H!ï
  136. "#
  137. H"$#"«
  138. H"¬
  139. %8L&˜
  140. O&˘
  141. '\
  142. H']#(
  143. H(
  144. (8
  145. H(9#(Æ
  146. H(Ç
  147. )
  148. )
  149. )9G);
  150. K)}G)
  151. K)ÔG)Ö
  152. K**
  153. *+
  154. *D
  155. *òà4+
  156. 3+
  157. +
  158. ,]
  159. ,»
  160. ,Ä
  161. ,ê?71
  162. H72
  163. 7ˆ
  164. H7˜#7fl
  165. H7ÿÓA8
  166. 8åà48÷
  167. @8ø
  168. 8ù
  169. :'
  170. :7
  171. ;
  172. 
  173. n;
  174. ;>
  175. =àN=
  176. P=
  177. =Y=
  178. W=AY=C
  179. Q=˝Y=ˇ
  180. R=Ã
  181. Q=ÄY=Æ
  182. R=fl
  183. W=ÿ
  184. > àZ>
  185. 
  186. >
  187. o>S
  188. p>T
  189. ≤ìı ì.ıˆËı    åÓ˙߉
  190. ¸≈ıèÌAùı„l:Ê˙߀ıˆ,.ıèÜIı‰!QDıh$,˙ß≥'Ápı˙Δ+1Äı‰À.õ'ı˜@2Îı|4êıP7ÿWı˙˘;Vmı„Ôì
  191.  
  192.  
  193. › 
  194.  
  195.  
  196.  
  197.   
  198. T E C H N O T E :
  199. QuickDraw GX ConicLibrary.c in Detail: Description and Derivations
  200.  
  201.  
  202. By Cary Clark
  203. cary@artemis.com
  204. Apple Emeritus
  205. This Technote discusses ConicLibrary.c from the QuickDraw GX Libraries. 
  206. This Note is intended for Macintosh QuickDraw GX developers who want to approximate ellipses and hyperbolas with paths. These, with parabolas (gxCurves), form the familty of curves called conics.
  207.  
  208. About the GX Libraries
  209.  
  210. For better or worse, the development of QuickDraw GX took seven years from conception to initial release. During that time, there were many requests for feature enhancements and interface improvements that, if implemented, might have taken seven more years to complete. As it turns out, some of these enhancements could readily be built on existing services, but there was no time to test or document these services with the rigor required to make them fully part of the released system.
  211. The GX Libraries fill this gap by providing services built on top of the rest. of QuickDraw GX in source form. This Technote and others document these services. Since GX libraries are provided as source, it is reasonable for developers to modify them to meet their specific needs. Care was taken for the libraries not to depend on the implementation details of QuickDraw GX so that future versions should not invalidate them, in original or modified form.
  212. The libraries are likely to evolve to take advantage of improved algorithms, as well as new Macintosh or QuickDraw GX services. If you modify one for your applicationÕs specific neËeds, itÕs worth occasionally reviewing the GX library provided by Apple to stay synchronized with any improvements.
  213. What is in ConicLibrary.c?
  214.  
  215. The GX Library, ConicLibrary.c, generates conics, a family of curves that include circles, ellipses, parabolas and hyperbolas. It was written by Michael Reed (the guy behind GX Fonts and TrueType) from a math paper derived by Robert Johnson, the GX resident mathematics professor.
  216.  
  217. Using ConicLibrary.c
  218. A Conic is a gxCurve, Almost
  219.  
  220. ConicLibrary.c uses the conic struct:
  221. struct conic {
  222.     gxPoint a;
  223.     gxPoint b;
  224.     gxPoint c;
  225.     Fixed lambda;
  226. };
  227. This is nearly the same as the gxCurve struct; it differs only by the additional lambda parameter. (Mike was a math major, too.) The lamba specifies the curvature. If the curvature is equal to one, the conic is a parabola, and is identical to a gxCurve (also known as a quadratic B⁄zier) with the same three points, as illustrated in Figure 1.
  228.  
  229. In Figure 1, as lambda decreases, the curvÓe approaches the line from point a to point b. All of these curves are elliptical arcs. When lambda hits zero, the curve has become a line from point a to point c.
  230. As lambda increases, the curve approaches point b. These curves are hyperbolas. Once lambda gets big enough, the curve approximates two line segments: one from point a to point b, and another from point b to point c.
  231.  
  232.  
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241. Figure 1 - A Quadratic Rational Spline with Vertices (a,b,c)
  242.  
  243. One reasonable use of the ConicLibrary provides a graphics application with a means to change the amount of curvature defined by a quadratic B⁄zier, a segment of a gxPath. To increase the curvature, simply increase lambda.
  244.  
  245. Conic Functions
  246.  
  247. Before we get into what the various values for lambda do, letÕs take a look at the conic library functions.
  248.  
  249. NewConic
  250.  
  251.     gxShape NewConic(const conic *curve);
  252.  
  253. NewConic creates a path which approximates the conic. It subdivides the original conic into a pair of conics, recursively, unt≈il the gxCurve described by the smaller conic has a sufficiently small error. The error is set by the default pathÕs shape error, which is initially 1.0. You can set it to a larger or smaller error with:
  254. GXSetShapeCurveError(GXGetDefaultShape(gxPathType), errorValue);
  255.  
  256. DrawConic
  257.  
  258.     void DrawConic(const conic *curve, gxShapeFill fill);
  259.  
  260. DrawConic creates the path shape, draws it with the specified fill, and throws it away. The fill can be any gxShapeFill value that works with a path; gxOpenFrameFill is the most common choice.
  261.  
  262. SetConic
  263.  
  264.     void SetConic(gxShape target, const conic *curve);
  265.  
  266. This replaces the geometry in an existing shape with a path that approximates the conic.
  267. It is not necessary to understand lambda in mathematical terms. Its usefulness for ConicLibrary.c can be summarized by the following: increasing lambda increases curvature, while decreasing lambda decreases the curvature.
  268. Note:
  269. These functions are orthogonal to other GX Graphics primitives, such as points, lines, polygons and paths, and other libraries, such as cubics, arcs, ovals and rounded rectangles. You can rely on functions of the form NewX, SetX and DrawX for any geometry supported by QuickDraw GX.
  270.  
  271. The Theory behind ConicLibrary.c
  272.  
  273. In the discussion that follows, several liberties are taken. Since the reader is assumed to be a programmer, not a mathematician, most of the equations that follow are in C++ rather than in mathematical notation. The non-existent structs fPoint, fCurve and fConic are introduced, to make the code easier to read. They are defined as:
  274. struct fPoint {
  275.     float x;
  276.     float y;
  277. };
  278. struct fCurve {
  279.     fPoint first;
  280.     fPoint control;
  281.     fPoint last;
  282. }Ê;
  283. struct fConic {
  284.     fPoint a;
  285.     fPoint b;
  286.     fPoint c;
  287.     float lambda;
  288. };
  289.  
  290. Note:
  291. My apologies to the mathematicians of the world for bastardizing concepts, to the C programmers of the world for using C++, and to the GX Engineers for using not using Fixed.
  292. There are (at least) two ways of describing conics. First, the ones that use x and y in equations you vaguely remember from high school:
  293.  
  294.     circle:        x2 + y2 = 0
  295.     parabola:     x = y2
  296.     hyperbola:    x2 - y2 = 1
  297.     ellipse:        x2/a + y2/b = 0
  298.  
  299. WeÕre going to mostly ignore these, except to note that they can all be generalized by:
  300.  
  301.     conic:        ax2 + bx + cy2 + dy + exy + f = 0
  302.  
  303. This looks suspicously like the equation describing a parabola (with the right values of a, b, c, d, e and f) ‹ a gxCurve; and it is. LetÕs see how.
  304. Describing a Curve
  305. The general conic equation asserts that any equation of order 2 in x and y describes a conic. A conic, in turn, is described as a plane section of a pair of cones, stacked point to point. Slicing these cones reveals the familiar circles, ellipses, parabolas and hyperbolas.
  306. ThereÕs another way to describe a parabola: as a parametric equation. A parametric equation (at least as they are going to be described here) describes x and y in terms of two equations as a third parameter, t, varies from zero to one. The equation for a second order parametric equation is:
  307.  
  308.     x = at2 + bt + c
  309.     y = dt2 + et + f
  310.  
  311. ItÕs easy to see how this describes at least a non-rotated parabola; setting a or d to zero allows specifying an xy equation where either x or y is squared. More importantly for computers, itÕs easy to turn this equation into a forward differencing algorithm that allows approximating the curve as a series of lines with computations no more complicated than adds and shifts..
  312. If the curve described by these equations is limited by t starting at zero and ending at one, then the curve begins at (c, f) and ends at (a + b + c, d + e + f). Plugging in 0.5 for t yields the curveÕs midpoint; i.e., x = a/4 + b/2 + c. It is convenient to be able to define a curve by where it starts and ends; all thatÕs missing is some additional information that describes how it curves. A gxCurve describes a parabolic segment in terms of three control points, named first, control and last. We can describe those points in terms of their parametric parameters:
  313.     first = c
  314.     control = b/2 + c
  315.     last = a + b + c
  316. The control point is formed by intersecting the tangent lines at the start and end of the curve. We can express the mid point in terms of first, control and last by:
  317.     mid = a/4 + b/2 + c = c/4 + b/4 + c/2+ (a + b + c)/4 = first/4 +control/2 + last/4
  318. Solving for a, b and c results in:
  319.     a = first - 2 * control + last
  320.     b = control * 2 - first * 2
  321.     c = first
  322. By substituting the above equations, we can specify a pair of parametric equations that describe a curve, given three points: (C++ code begins here:)
  323.     void CurveXY(const fCurve& cu, float& x, float& y, const float t)
  324.     {
  325.         x = (cu.first.x - 2 * cu.control.x + cu.last.x) * t * t +
  326.             2 * (cu.control.x - cu.first.x) * t + cu.first.x;
  327.         y = (cu.first.y - 2 * cu.control.y + cu.last.y) * t * t +
  328.             2 * (cu.control.y - cu.first.y) * t + cu.first.y;
  329.     }
  330. We can regroup the terms to reference the pointsÕ ordinates once: 
  331.     void CurveXY(const fCurve& cu, float& x, float& y, const float t)
  332.     {
  333.         x = cu.first.x * ( 1 - t) *D (1 - t) + 2 * cu.control.x * t * (1 - t) + cu.last.x * t * t;
  334.         y = cu.first.y * ( 1 - t) * (1 - t) + 2 * cu.control.y * t * (1 - t) + cu.last.y * t * t;
  335.     }
  336. Thus, the mid point of the curve is computed to be:
  337.     if ( t == 0.5) {    // optimize !
  338.         x = cu.first.x/4 + cu.control.x/2 + cu.last.x/4;
  339.         y = cu.first.y/4 + cu.control.y/2 + cu.last.y/4;
  340.     }
  341. Perspective geometry tells us that putting the points that describe a gxCurve or a gxPath through a gxMapping is accurate only if the gxMapping is affine; that is, it contains scaling, skewing, rotation and translation, but no perpsective. If a gxMapping is a perspective transformation, then a parabola becomes either a hyperbolic or elliptical segment. If any conic is sent through a perspective transformation, the result is another conic.
  342. In Technote 1051 - Understanding Conic Splines,, we learn that the parametric form for conics can be represented by sending the parametric equation for a quadratric B⁄zier through a perspective transformation:
  343. void FindConicXY(const fConic& con, float& x, float& y, const float t)
  344. {
  345.     x =    (con.a.x * ( 1 - t) * (1 - t) + 2 * con.lambda * con.b.x * t * (1 - t) + con.c.x * t * t) /
  346.         (1 + 2 * (con.lambda -1) * t * (1 - t));
  347.     y =     (con.a.y * ( 1 - t) * (1 - t) + 2 * lambda * con.b.y * t * (1 - t) + con.c.y * t * t) /
  348.         (1 + 2 * (con.lambda -1) * t * (1 - t));
  349. }
  350. Note that if we plug in 1.0 for con.lambda, the denominator becomes equal to 1.0; the numerator becomes identical to the CurveXY function derived above.
  351. The mid-point for any conic simplifies to:
  352.     if ( t == 0.5) {    // optimize !
  353.         x = (con.a.x/2 + con.lambda * con.b.x + con.c.x/2) / (con.lambda + p1);
  354.         y = (con.a.y/2 + con.lambda * con.b.y + con.c.y/2) / (con.lambda + 1);
  355.     }
  356. If lambda equals 1, then this becomes:
  357.     if (t == 0.5 && con.lambda == 1) {    // further optimize !
  358.         x = con.a.x/4 + con.b.x/2 + con.c.x/4;
  359.         y = con.a.y/4 + con.b.y/2 + con.c.y/4;
  360.     }
  361. which is identical to the equation for a gxCurve or parabola that we derived above.
  362.  
  363. In summary, what do we know?
  364. n    A second order parametric equation describes a parabolic segment.
  365. n    By adding a weighted divisor, conics can also be described by a parametric equation.
  366. n    If the weight in the conic equation is set to 1, the result is a parabolic segment.
  367.  
  368. Without any proof, itÕs worth knowing that if lambda is greater than 1, the conic equation describes a hyperbolic segment; if lambda is less than one, it describes an elliptical or circular segment.
  369. Computing Lambda
  370.  
  371. Now letÕs determine the appropriate lambda vaÄlue for a circular arc. HereÕs the decidedy GX-centric approach weÕll take:
  372. a) Construct a pair of lines perpendicular to the tangents at the arcÕs ends.
  373. b) Define the circleÕs center to be the intersection of these lines.
  374. c) Rotate one of these lines to the mid-angle to define the arcÕs mid-point.
  375. d) Use the arcÕs mid-point to define the arcÕs lambda value.
  376. So you can try this on your own,weÕll code this as legitimate fixed-point code.
  377. #include <GraphicsLibraries.h>
  378. #include <assert.h>
  379.  
  380. static void FindCircularLambda(conic& arc)
  381. {
  382. // we need a value for lambda that makes the midPoint equi-distant from the circle center.
  383. // first, we need to find where the hypothetical center is. There are many ways to find 
  384. // the circle center;
  385. // the way weÕll choose has a GX flavor; weÕll construct two radius lines and find where 
  386. // they intersect.
  387.  
  388. // start with the arc tangents from the end points to the control point
  389.     gxLine first = {{arc.a.x, arc.a.y}, {arc.'b.x, arc.b.y}};
  390.     gxLine second = {{arc.c.x, arc.c.y}, {arc.b.x, arc.b.y}};
  391.     gxShape line1 = GXNewLine(&first);
  392.     gxShape line2 = GXNewLine(&second);
  393.  
  394. // these lines need to be rotated towards the circleÕs center. 
  395. // knowing the arc direction helps.
  396.  
  397.     gxShape arcShape = GXNewCurve((gxCurve*) &arc);
  398.     Boolean direction = (GXGetShapeDirection(arcShape, 1) << 1) - 1; 
  399.         // -1 counter, 1 clockwise
  400.     GXDisposeShape(arcShape);
  401.  
  402. // if the curve is clockwise, rotate the first 90¡ clockwise and
  403. // the second 90¡ counter-clockwise
  404.  
  405.     GXRotateShape(line1, direction * ff(90), arc.a.x, arc.a.y);
  406.     GXRotateShape(line2, -direction * ff(90), arc.c.x, arc.c.y);
  407.  
  408. // while these lines donÕt touch, make them bigger
  409.  
  410.     while (GXTouchesShape(line1, line2) == false) {
  411.         GXScaleShape(line1, ff(2), ff(2), first.first.x, first.Îfirst.y);
  412.         GXScaleShape(line2, ff(2), ff(2),second.first.x, second.first.y);
  413.     }
  414.  
  415. // now that they touch, find their intersection (line2 becomes a gxPoint).
  416.  
  417.     GXIntersectShape(line2, line1);
  418.     gxPoint center;
  419.     GXGetPoint(line2, ¢er);
  420.  
  421. // weÕll use the tangents to describe the span of the arc.
  422.  
  423.     gxPoint point1 = {arc.a.x - center.x, arc.a.y - center.y};
  424.     gxPoint point2 = {arc.c.x - center.x, arc.c.y - center.y};
  425.     gxPolar pole1, pole2;
  426.     PointToPolar(&point1, &pole1);
  427.     PointToPolar(&point2, &pole2);
  428.  
  429. // now we can rotate the first line so the starting point is at the arcÕs mid point
  430.  
  431.     GXRotateShape(line1, pole2.angle - pole1.angle >> 1, center.x, center.y);
  432.     gxPoint mid;
  433.     GXGetShapePoints(line1, 1, 1, &mid);
  434. 
  435. // given:    mid.x = (arc.a.x/2 + lambda * arc.b.x + arc.c.x/2) / (lambda + 1)
  436. // then:        2 * mid.x * (lambda + 1) = arc.a.x + 2 * lambda * arc.b.x + arc.c.x
  437. // then:        lambda * 2 * (mid.x - arc.b.x) = arc.a.x + arc.c.x - 2 * mid.x
  438. // then:        
  439.     Fixed lambda = FixedDivide(arc.a.x + arc.c.x - 2 * mid.x, 2 * (mid.x - arc.b.x));
  440.     Fixed lambda2 = FixedDivide(arc.a.y + arc.c.y - 2 * mid.y, 2 * (mid.y - arc.b.y));
  441.     Fixed error = lambda - lambda2;
  442.     if (error < 0) error = - error;
  443.     assert(error < 4);    // error should be small !
  444.     arc.lambda = lambda + lambda2 >> 1;    // return average of two
  445.  }
  446. For this example to work, the arc b point must be equidistant from the a and c points. For example:
  447.     conic arc = {{0, 0}, {ff(125), ff(0)}, {ff(200), ff(100)}};
  448.     FindCircularLambda(arc);
  449.     DrawConic(&arc);
  450. WSummary
  451. GX Libraries have a wealth of information and show how to use QuickDraw GX to solve real problems. The Conic Library shows how to use GX to construct paths that approximate conics, given three control points and a weight.
  452. Reference Material
  453.  
  454. There are several different directions that conics can be taken. ItÕs possible that a future version of GX will directly support conics in all of its primitive operations. Until then, it is straight-forward to take the information presented here, forget all of it, and read Technote 1051 - Understanding Conic Splines instead to derive the code to transform conics through general gxMappings.
  455. Another possible line of development is to adopt the general xy form equation for conics to use with GX. Foley and Van DammÕs venerable Computer Graphics (2nd edition) from Addison-Wesley presents code for scan cmonverting conics in their general form. This algorithm is further explored on the Internet at http://www.ece.uiuc.edu/~ece291/class-resources/gpe/conic.cc.html.
  456. There are also a number of Internet resources to explore conics further. Listing them here will likely produce references that quickly grow out of date, but you might try linking to http://www.geom.umn.edu/apps/conics/ or http://www.bham.ac.uk/mathwise/syl3_2.htm.
  457. Further Reference
  458.  
  459. n    Technote 1051 - Understanding Conic Splines
  460. n    MacOS SDK CD, Development Kits (Disc 2): QuickDraw GX: Programming Stuff: GX Libraries:
  461. n    Inside Macintosh: QuickDraw GX Objects
  462. n    Inside Macintosh: QuickDraw GX Environment and Utilities
  463.  
  464. Acknowledgments
  465.  
  466. Thanks to Tom Dowdy and Ingrid Kelly for reviewing this Technote. 
  467. Thanks to Michael Reed for the library, and Robert Johnson for still slogging it out after all of these years.ZÿÿN°DSET°ÿÿ.Hú]™]ÿÿÿÿÿÿı„0°√A«Ø°ÿÿ˚u Jõ ûı„h\6ÿÿ*A«bb•±ÿ ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  468. ••ÿÿ˘•”•±HHı‰8ÿÿÿÿÿÿÿflflflflflfl‡‡‡‡‡‡üüüüüüûûûûûûúúúúúúùùùùùùøøøøøø÷÷÷÷÷÷    öööööö
  469. õõõõõõ ôôôôôô óóóóóó
  470. òòòòòòññññññ››››››ïïïïïïîîîîîîííííííììììììëëëëëëêêêêêêééééééèèèèèèççççççææææææååååååääääääããããããââââââááááááàààààà ßßßßßß!fifififififi"††††††#ÜÜÜÜÜÜ$ÛÛÛÛÛÛ%ÚÚÚÚÚÚ&ÙÙÙÙÙÙ'ØØØØØØ(◊◊◊◊◊◊)ÖÖÖÖÖÖ*ÕÕÕÕÕÕ+ÔÔÔÔÔÔ,ÓÓÓÓÓÓ-ÒÒÒÒÒÒ.ÑÑÑÑÑÑ/‹‹‹‹‹‹0ÏÏÏÏÏÏ1ÎÎÎÎÎÎ2ÍÍÍÍÍÍ3ÌÌÌÌÌÌ4ËËËËËË5ÊÊÊÊÊÊ6ÉÉÉÉÉÉ7ÈÈÈÈÈÈ8ÇÇÇÇÇÇ9ÆÆÆÆÆÆ:ÅÅÅÅÅÅ;ÄÄÄÄÄÄ<ÃÃÃÃÃÃ=ÂÂÂÂÂÂ>ÁÁÁÁÁÁ?ÀÀÀÀÀÀ@¿¿¿¿¿¿A≤≤≤≤≤≤B∏∏∏∏∏∏CππππππD»»»»»»EººººººF’’’’’’G¸¸¸¸¸¸H······I¶¶¶¶¶¶JµµµµµµK´´´´´´L““““““M””””””N±±±±±±O°°°°°°P¯¯¯¯¯¯Q®®®®®®R––––––S¬¬¬¬¬¬T««««««UªªªªªªV©©©©©©W¨¨¨¨¨¨X§§§§§§YœœœœœœZ¥¥¥¥¥¥[€€€€€€\££££££]¢¢¢¢¢¢^¡¡¡¡¡¡_      `ƒƒƒƒƒƒaııııııbˇˇˇˇˇˇc˛˛˛˛˛˛d˝˝˝˝˝˝e˚˚˚˚˚˚f˙˙˙˙˙˙g˘˘˘˘˘˘h˜˜˜˜˜˜iˆˆˆˆˆˆjk‰‰‰‰‰‰l„„„„„„m‚‚‚‚‚‚nŒŒŒŒŒŒoΔΔΔΔΔΔp∂∂∂∂∂∂q⁄⁄⁄⁄⁄⁄rŸŸŸŸŸŸs‘‘‘‘‘‘t——————u………………v≈≈≈≈≈≈w√√√√√√xΩΩΩΩΩΩy∫∫∫∫∫∫z∑∑∑∑∑∑{≥≥≥≥≥≥|∞∞∞∞∞∞}≠≠≠≠≠≠~™™™™™™•••••••™~~~~~~≠}}}}}}∞||||||≥{{{{{{∑zzzzzz∫yyyyyyΩxxxxxx√wwwwww≈vvvvvv…uuuuuu—tttttt‘ssssssŸrrrrrr⁄qqqqqq∂ppppppΔooooooŒnnnnnn‚mmmmmm„llllll‰kkkkkkjjjjjjˆiiiiii˜hhhhhh˘gggggg˙ffffff˚eeeeee˝dddddd˛ccccccˇbbbbbbıaaaaaaƒ`````` ______¡^^^^^^¢]]]]]]£\\\\\\€[[[[[[¥ZZZZZZœYYYYYY§XXXXXX¨WWWWWW©VVVVVVªUUUUUU«TTTTTT¬SSSSSS–RRRRRR®QQQQQQ¯PPPPPP°OOOOOO±NNNNNN”MMMMMM“LLLLLL´KKKKKKµJJJJJJ¶IIIIII·HHHHHH¸GGGGGG’FFFFFFºEEEEEE»DDDDDDπCCCCCC∏BBBBBB≤AAAAAA¿@@@@@@À??????Á>>>>>>Â======Ã<<<<<<Ä;;;;;;Å::::::Æ999999Ç888888È777777É666666Ê555555Ë444444Ì333333Í222222Î111111Ï000000‹//////Ñ......Ò------Ó,,,,,,Ô++++++Õ******Ö))))))◊((((((Ø''''''Ù&&&&&&Ú%%%%%%Û$$$$$$Ü######†""""""fi!!!!!!ß      àáâãäåæçèéêëìíîï›ñò
  471.  
  472.  
  473.  
  474.  
  475.  
  476. ó ô õ
  477.  
  478.  
  479.  
  480.  
  481.  
  482. ö                        ÷øùúûü‡flÿ•±•±™ÿ‹ÿÿ™‹ÿ™‹ÿ™‹ÿ¢ÿ°ÿ¢ÿ°ÿ¢‡ÿ“ ÿ¢ÿflÿ´ÿ¬‡ÿûÿflÿ´ÿ–ûÿüÿflÿ´ÿ–ûÿüÿflÿ´ÿ–ûÿüÿflÿ´ ÿ–ûÿü‡ÿ“ÿ–üÿ© ÿ–ÿflÿ© ÿ®ÿüÿª ÿ¯ÿúÿ« ÿ¯ÿúÿ« ÿ°ÿøÿ¬ ÿ±ÿöÿ– ÿ±ÿöÿ– ÿ”ÿôÿ® ÿ“ÿòÿ¯ ÿ“ÿòÿ¯ ÿ´ÿ›ÿ° ÿµÿîÿ± ÿµÿîÿ± ÿ¶ÿìÿ” ÿ·ÿêÿ“ ÿ·ÿêÿ“ ÿ¸ÿèÿ´ ÿ’ÿæÿµ ÿ’ÿæÿµ ÿºÿäÿ¶ ÿ»ÿâÿ· ÿ»ÿâÿ· ÿπÿàÿ¸ ÿ∏ÿfiÿ’ ÿ∏ÿfiÿ’ ÿ≤ÿÜÿº ÿ¿ÿÚÿ» ÿ¿ÿÚÿ» ÿÀÿØÿπ ÿÁÿÖÿ∏ ÿÁÿÖÿ∏ ÿÂÿÔÿ≤ ÿÃÿÒÿ¿ ÿÃÿÒÿ¿ ÿÄÿ‹ÿÀ ÿÅÿÎÿÁ ÿÅÿÎÿÁ ÿÆÿÌÿ ÿÇÿÊÿà ÿÇÿÊÿà ÿÈÿÈÿÄ ÿÉÿÆÿÅ ÿÉÿÆÿÅ ÿÊÿÄÿÆ ÿËÿÂÿÇ ÿËÿÂÿÇ ÿÌÿÀÿÈ ÿÍÿ≤ÿÉ ÿÍÿ≤ÿÉ ÿÎÿπÿÊ ÿÏÿºÿËÿÏÿåñ·æÿËÿ‹ÿ臷ñfl·èÿÌÿÑÿêfl·êfl·êÿÍÿÑÿífl·äfl·íÿÍÿÒÿïfl·fifl·ïÿÎÿÓÿ›··Ø··›ÿÏÿÓÿò··Ô··òÿÏÿÔÿó··‹··óÿ‹ÿÕÿô··Ì··ôÿÑÿÕÿö··È··öÿÑÿÖÿö·Ä·öÿÒÿ◊ÿö·Â·öÿÓÿ◊ÿø··À··øÿÓÿØÿø·π·øÿÔÿÙÿø·º·øÿÕÿÙÿú··¸··úÿÕÿÚÿú·´·úÿÖÿÛÿú·”·úÿ◊ÿÛÿû·°·ûÿ◊ÿÜÿü··®··üÿØÿ†ÿü·ª·üÿÙÿ†ÿ‡·¨·‡ÿÙÿfiÿ‡·œ·‡ÿÚÿßÿ‡·€·‡ÿÛÿßÿfl·¢·flÿÛÿàÿfl· ·flÿÜÿáÿfl·ı·flÿ†ÿáÿ·˛·ÿ†ÿâÿ·˚·ÿfiÿãÿ·˘·ÿßÿãÿ·ˆ·ÿßÿäÿ·‰·ÿàÿåÿ·‚·ÿáÿåÿ·Δ·ÿáÿæÿ·⁄·ÿâÿçÿ·⁄·ÿãÿçÿ·‘·ÿãÿèÿ·…·ÿäÿéÿ·√·ÿåÿéÿ·√·ÿåÿêÿ·∫·ÿæÿëÿ·≥·ÿç ÿë·≠·ç
  483. ÿì·™·èÿíÿ·™·ÿéÿí·™fl·éÿî·™ü·êÿïÿ·™ü·ÿëÿï·™ú·ëÿ›·™ø·ìÿflflÿ÷·™ö·íÿÿflÿø·™ö·öflÿûÿfl‡ÿüflÿ·™ô·flÿûÿflÿü!ÿÿflÿ‡flÿ·ÿÿ™öÿÿ·flÿüÿø!ÿÿflÿ‡flÿ·ÿÿ™öÿÿ·flÿüÿøÿÿflÿ‡ûÿ™öûÿüÿøÿfl‡ÿ‡ûÿ™öûÿüÿflÿüÿõ‡ÿ™ô‡ÿúflÿûÿ™‹ÿ™‹ÿ™‹ÿ™‹ÿ™‹ÿDSETHÿÿ.Hööö++ÿÿÿÿÿÿıˆ$«R°ÿÿ√Ú°ÿÿb°ÿÿ˘    ê°ÿÿ
  484.   r°ÿÿ ¨ú°ÿÿ0≠°ÿÿ¸
  485. °ÿÿ@‚°ÿÿȰ    ÿÿP¢°
  486. ÿÿS√°ÿÿÛ°ÿÿc˘°ÿÿ    ë
  487.  °ÿÿ s ¨°ÿÿû0°ÿÿ∞¸°ÿÿ @°ÿÿ„Ȱ    ÿÿP°
  488. ÿÿ£Ø° ÿÿ6ÿÿ*A«DSET≠ÿÿ.H‘ˆÔÿÿÿÿÿÿıˆØ¸ 5°ÿÿ ÿÿ*¸ °5 ô°5 ô°5
  489. ô°5ô°5ô°5ô°5ô°5ô°5ô°5ô°5DSETT@•≠ı‰\ıˆ@ıˆÔı˙Ȱ5ıè‘5 ≠$ "    à≠  y[ˇP[¥ΔWWl≤[¡‰
  490. ∞ı„ü∞
  491.  
  492. Technote 1052    ///          Release 1.0       © 1996   Apple Computer, Inc.      ///              ///          Page  of  10
  493. FNTMCUTSDSUM%
  494. Ingrid KellyHDNISTYLΔçÿÿ@STYL˙¬X˙ßàı‰4ıˆ°˙ßÜı„πı„8ı‚Äàÿÿ£
  495. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
  496. ÿÿÿÿ•
  497. ÿÿÿÿ
  498. ÿÿÿÿ
  499. ÿÿÿÿÿÿÿÿÿÿ'    ÿÿÿÿÿÿ             ÿÿÿÿÿÿ
  500. ÿÿ    ÿÿÿÿ (    ÿÿ
  501. ÿÿÿÿ )    ÿÿÿÿÿÿ
  502. *    ÿÿÿÿÿÿ
  503. ÿÿ(ÿÿÿÿ ÿÿ(ÿÿÿÿÿÿ)ÿÿÿÿÿÿ*ÿÿÿÿÿÿ ÿÿÿÿ0ÿÿ ÿÿÿÿ1ÿÿÿÿÿÿ2ÿÿÿÿÿÿ3ÿÿÿÿÿÿ        ÿÿÿÿÿÿ
  504. ÿÿ    ÿÿÿÿ    ÿÿÿÿÿÿÿÿÿÿ∂    ÿÿÿÿDÿÿÿÿÿÿ    ÿÿ ÿÿÿÿ ÿÿÿÿÿÿ
  505. ÿÿÿÿ ÿÿ ÿÿÿÿ!ÿÿÿÿÿÿ"    ÿÿ
  506. ÿÿÿÿ#ÿÿ ÿÿ $ÿÿÿÿÿÿ@%,    ÿÿ&ÿÿÿÿ
  507. &Bÿÿ,ÿÿÿÿ'    ÿÿÿÿÿÿ( ÿÿÿÿ)! ÿÿÿÿ*$ÿÿ"+    ÿÿ
  508. ÿÿÿÿ,%$ÿÿ)-.     ÿÿÿÿ.-ÿÿÿÿÿÿ/+    ÿÿ'ÿÿÿÿ0;ÿÿ+ÿÿÿÿ1Eÿÿ+ÿÿÿÿ2&ÿÿ,ÿÿÿÿ35    ÿÿ(ÿÿÿÿ4C    ÿÿ)ÿÿÿÿ5#ÿÿ5ÿÿÿÿ6:ÿÿCÿÿÿÿ 7Dÿÿ!ÿÿ58?ÿÿ5ÿÿÿÿ 9Hÿÿ5ÿÿÿÿ:9ÿÿ5(ÿÿ:;=ÿÿ5(ÿÿÿÿ    <>    ÿÿ#ÿÿÿÿ=Gÿÿ># ÿÿÿÿ>Kÿÿ> ÿÿÿÿ?F    ÿÿ*ÿÿÿÿ@LÿÿF!ÿÿÿÿAOÿÿF!ÿÿ,B4$ÿÿÿÿC@ÿÿÿÿ'D<    ÿÿÿÿ-EA <ÿÿ+F7    ÿÿ
  509. ÿÿBGN$7ÿÿCHPÿÿ7ÿÿ<IS    ÿÿ#ÿÿ>JQÿÿS ÿÿÿÿKRÿÿS, ÿÿJLWÿÿS ÿÿ=MYÿÿS# ÿÿÿÿNV    ÿÿ$ÿÿÿÿOXÿÿ%    ÿÿPZXV&ÿÿQI    ÿÿÿÿRTÿÿ ÿÿS[ÿÿIÿÿÿÿT^ÿÿI-ÿÿÿÿU`ÿÿI.ÿÿÿÿV"ÿÿ/ÿÿÿÿWUÿÿ,3ÿÿÿÿX\ÿÿ$ÿÿ&Yaÿÿ,ÿÿÿÿZ_ÿÿ,.ÿÿZ[bÿÿ,.ÿÿ%\c    ÿÿ&ÿÿY]dÿÿcÿÿÿÿ^hÿÿ>ÿÿQ_i    ÿÿÿÿ^`jÿÿi>ÿÿSakÿÿiÿÿÿÿbnÿÿ,ÿÿacoÿÿ    ÿÿcdpÿÿ    ÿÿe]ÿÿ)ÿÿÿÿffÿÿ,?ÿÿÿÿg'ÿÿ
  510. ÿÿh/ÿÿ ÿÿi6ÿÿÿÿ
  511.      ÿÿj8ÿÿÿÿ
  512. 
  513. ÿÿkeÿÿÿÿ
  514. ÿÿ%lg‹ÿÿÿÿ ÿÿml0ggÿÿÿÿnm0ggÿÿÿÿoq0ggÿÿÿÿpr0gmÿÿÿÿqs0gmÿÿÿÿrt0gm    ÿÿÿÿsu0gm
  515. ÿÿÿÿtv0gm ÿÿÿÿuw0gm ÿÿÿÿvx0gl"
  516. ÿÿÿÿwy0gl'ÿÿÿÿxz0gq)ÿÿÿÿy{0gqÿÿÿÿ%z|‹ÿÿÿÿ ÿÿ{}0||*ÿÿn|~0||ÿÿo}0||ÿÿÿÿ~•0|~)ÿÿq™0|~ÿÿr•≠0|~    ÿÿs™∞0|~
  517. ÿÿt≠≥0|~ ÿÿu∞∑0|~ ÿÿÿÿ≥∫0|}0ÿÿÿÿ∑Ω0|}1ÿÿÿÿ∫√0|2ÿÿyΩ≈0|ÿÿÿÿ%√…‹ÿÿÿÿ ÿÿ≈—0……4ÿÿÿÿ…‘0……5ÿÿÿÿ—Ÿ0……5ÿÿÿÿ‘⁄0…‘6ÿÿÿÿŸ∂0…‘7ÿÿÿÿ⁄Δ0…‘7    ÿÿÿÿ∂Œ0…‘7
  518. ÿÿÿÿΔ‚0…‘7 ÿÿÿÿŒ„0…‘7 ÿÿÿÿ‚‰0…—8ÿÿÿÿ„0…—8ÿÿÿÿ‰ˆ0…Ÿ6ÿÿÿÿ˜0…Ÿ7ÿÿÿÿ%ˆ˘‹ÿÿÿÿ ÿÿ˜˙0˘˘9ÿÿÿÿ˘˚0˘˘    ÿÿÿÿ˙˝0˘˘    ÿÿÿÿ˚˛0˘˚:
  519. ÿÿÿÿ˝ˇ0˘˚ÿÿÿÿ˛ı0˘˚ 
  520. ÿÿÿÿˇƒ0˘˚!
  521. ÿÿÿÿı 0˘˚"
  522. ÿÿÿÿƒ¡0˘˚#
  523. ÿÿÿÿ ¢0˘˙;$ ÿÿÿÿ¡£0˘˙;% ÿÿÿÿ¢€0˘˝)&
  524. ÿÿÿÿ£¥0˘˝'ÿÿÿÿ%€œ‹ÿÿÿÿ (ÿÿ¥§0œœ<)ÿÿÿÿœ¨0œœ*ÿÿÿÿ§©0œœ+ ÿÿÿÿ¨ª0œ¨),ÿÿÿÿ©«0œ¨-ÿÿÿÿª¬0œ¨.ÿÿÿÿ«–0œ¨/ÿÿÿÿ¬®0œ¨0ÿÿÿÿ–¯0œ¨1ÿÿÿÿ®°0œ§=6ÿÿÿÿ¯±0œ§=7ÿÿÿÿ°”0œ©24ÿÿÿÿ±“0œ©5ÿÿÿÿ”´‹ÿÿÿÿ (ÿÿ“µ0´´))
  525. ÿÿœ´¶0´´*ÿÿÿÿµ·0´´2ÿÿÿÿ¶¸0´¶,ÿÿÿÿ·’0´¶3ÿÿÿÿ¸º0´¶8ÿÿÿÿ’»0´¶9ÿÿÿÿºπ0´¶:ÿÿÿÿ»∏0´µ@6ÿÿÿÿπ≤0´·)<ÿÿÿÿ∏¿‹ÿÿÿÿ
  526. ;ÿÿ≤À0¿¿A=ÿÿÿÿ¿Á0¿¿
  527. >ÿÿÿÿÀÂ0¿Á
  528.  ÿÿÿÿÁÃ0¿Á
  529. !ÿÿÿÿÂÄ0¿Á
  530. "ÿÿÿÿÃÅ0¿Á
  531. #ÿÿÿÿÄÆ0¿ÀBAÿÿÿÿÅÇ0¿ÀBBÿÿÿÿÆÈØÿÿÿÿ
  532. ÿÿÇÉ8ÈÈ
  533. ÿÿÿÿÈÊ8ÈÈ
  534. ÿÿÿÿÉË8ÈÈ
  535. ÿÿÿÿÊÌ8ÈÈ
  536.  ÿÿÿÿËÍ8ÈÈ
  537. "ÿÿÿÿÌÎ8ÈÈ
  538. %ÿÿÿÿÍÏ8ÈÈ
  539. +ÿÿÿÿ΋8ÈÈ
  540. ,ÿÿÿÿÏÑ8ÈÈ
  541. -ÿÿÿÿ‹Ò8ÈÈ
  542. .ÿÿÿÿÑÓ8ÈÈ
  543. /ÿÿÿÿÒÔ8ÈÈ
  544. 0ÿÿÿÿÓÕØÿÿÿÿC1ÿÿÔÖ8ÕÕD2ÿÿÿÿÕ◊8ÕÕE3ÿÿÿÿÖØ8ÕÕF4ÿÿÿÿ◊Ù8ÕÕG5ÿÿÿÿØÚ8ÕÕG6ÿÿÿÿÙÛ8ÕÕG7ÿÿÿÿÚÜ8ÕÕG8ÿÿÿÿÛ†8ÕÕG9ÿÿÿÿÜfi8ÕÕG:ÿÿÿÿ†ß8ÕÕG;ÿÿÿÿ fiàØÿÿÿÿ
  545. <ÿÿßá8àà
  546. =ÿÿÿÿàâ8àà
  547. >ÿÿÿÿáã8àà
  548. ?ÿÿÿÿâä8àà
  549. @ÿÿÿÿãå8àà
  550. Aÿÿÿÿäæ',HBÿÿÿÿåçX,&BÿÿGæè$ÿÿ≥≤ÿÿHASH‘
  551. $Ú àù(ô◊‘€Ã´Ø‘”ÑÛÔzÑÛÔ√à"ÔÎjá´fiãã%8◊∏ãµÕáˆêä*ëåO#öX&
  552. 
  553. P æ
  554. å&
  555. & $&
  556. øEøVø!ú        (äT&e∫2–,
  557. .–.
  558. 2–2
  559.  ®,d®,!U®,2b®.]®.![®/Δf®2 ®2R®:˘W®M7¯ `¯ )Tµ& ï2 !, _2     w2 ,ßQàvá˝âÀã, \,ÇQÈvÉ˝ÊÀËåÌ. D
  560. Í/ÎTÏy‹ıÑÃÒ,8ÔQIÕv4Ö˝5◊À5Øå5Ù    
  561. 5Ú    /5Û    T5Ü    y5† ˇÍbL ˇÍ∫K ƒÍ`M
  562. …Í`I|•™≠∞Ω0xO P¡CvUwø≥ ∑    0⁄    1∂    2Δ    3ŒC»J®K¯    (…
  563. G∫    5~y·‰y˝‚Ù?„Ù    Hùpù}ùB‘ù    $—ù    3Ÿ‡J˜‡>m‡ E¥ÿ>“≈ï{¿-˛.ˇ/ı0ƒF¢`˚/ª0«1¬2–0±J°&˝.£r@    rA
  564. "˘
  565. #˙
  566. $´
  567. %µÂÃÀÁ*Ä…”Åòr?ûHπ‡/©‡9’‡:º‡1¶‡7·‡8¸‡D¨fl0≤'§¡Óu8¢Ót;¢Óv9¢Õu6£≤0€≤ 1& N—Ót3‘Ót4Ÿπ/Æ&HÇ#/& FA& A
  568. 7L: Qf fw&
  569. f¸egÓh“çmkh’ÑÚj–◊alq”ºgr§élir”◊aht“◊Åfiz«áoz¶ÕÄl}Bod}©ÓÖÆÊI+
  570. CHAR˙ßüÿÿÿÿ ÿÿ ÿÿÿú    ÿÿÿfl ÿÿ ÿÿÿû
  571. ÿÿ•ÿÿÿú('ÿØ
  572. ÿÿÿÿÿÿÿÿÿÿ ÿÿ
  573. ÿÿÿÿ"    àÿÿ ÿÿàÿÿ
  574. ÿòÓÿÿÓÿÿ ÿóàÿÿàÿÿÿÿÿÿÿéÿÿ"
  575. ÿÿ ÿÿà (
  576. ÿÿÿÿÿÿ ÿÿàÿÿÿÿ
  577. ÿÿ ÿÿõÿÿ ÿÿÕ "ÿ† ÿÿÿÿÿÿ ÿÿÓÿÿ ÿÿàÿÿ ÿÿ
  578. '
  579. ÿÿÿÿÿÿÿ÷ ÿÿÿ÷ à%ÿÿ àÿÿ%
  580. ÿÿÿÿ
  581. ÿÿ     ÿÿÿÿÿÿFÿÿ
  582. ÿÿ&ÿÿ
  583. ÿÿÿÿ
  584. àÿÿÿÿ
  585. ÿÿ ÿÿÓ*
  586.     ÿÿ
  587.     ÿÿ
  588.     ÿÿÿÿ•
  589. ÿÿ.    ÿÿ
  590.     ÿÿ
  591. 5
  592. 
  593.     4/    ÿÿ*
  594. '2
  595. 9/
  596. ÿÿ        <        ÿÿ ÿÿ
  597. àÿÿÿÿ•
  598. )
  599. ÿÿAÿÿ&    ÿÿ&ÿÿ  ÿÿ&
  600. C&    ÿÿH4ÿÿHASH
  601. B0F1G4DEE≥"@3":8;;D:0)1*6    7    )=    *2 $     
  602. à &à
  603. è8
  604.   
  605.      .1,∂?
  606. ˜3"!ÓÓ/ÓÕàà>à àà à(-õH #RC?
  607. CELL˙ßÔ•ÿÿÿÿÿjÿÿÿ"ÿÿÿÿü
  608. ÿÿÿÿø
  609. ÿÿøÿÿÿÿÿÿÿÿÿÿ    ÿÿü
  610. ÿÿü
  611. ÿÿø
  612. ÿÿø
  613. ÿÿü
  614. ÿÿÿÿü
  615. ÿÿü
  616. ÿÿøÿÿøøÿÿÿÿÿÿÿÿx≥
  617. ÿÿØ$ ÿÿx• ÿÿØ 
  618. ÿÿÿÿÿÿÿÿÿÿ    ÿÿø
  619. ÿÿø ÿÿ ÿÿ
  620. ÿÿÿÿøÿÿÿÿûÿÿøÿÿøÿÿÿÿÿÿÿÿ    ÿÿÿÿøÿÿÿ ÿÿÿ
  621. ÿÿü
  622. ÿÿü ÿÿøÿÿøÿÿø    ÿÿÿÿø ÿÿø
  623. ÿÿ@ÿÿÿÿø
  624. ÿÿÿÿÿÿø ÿÿ(Ó
  625. ÿÿ√s Δ@ÿÿHASHÿ    
  626.       
  627. $ %
  628. 67(xŸx∂Ø1Ø3øøø    ø
  629. ø
  630. )ü ü >     
  631. ! " #&'
  632. ./01
  633. 45;*2*èA…‘Bú=ú
  634. -ú,ú<ú3ú8ú9ú:‡    + fiÿÿ
  635. GRPHı„dÿÿÿÿÿiÿÿÿBÿÿìÿÿÎÿÿ
  636. ÿÿÎÿÿ
  637. ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ ÿÿ≠ÿÿHASH
  638. 
  639. Ò    Î 
  640.  íZCÿÿl
  641. RULRı ÿÿÿÿÿÿÿÿ‡@ÿÿ[ÿÿiÿbBÿÿiÿbB ÿÿ
  642. ÿbBÿÿÿbB ÿÿaÿ˚ÿÿ $ÿÿiÿzBÿÿ $ÿÿÿbÿôNN.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿiÿÂB ÿÿaÿJÿÿiÿÂBdÿÿÿÂB ÿÿÿJÿÿÿÂBdÿÿiÿ:B ÿÿÿ:B ÿÿ     $ÿÿÿ@ÿÿÿÿÿzBÿÿ$ÿÿÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿHÿÿÿbBÿÿÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.ÿ€Õv€ÿÿlÿÿÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿΔÿÿÿb  6.G.V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.ÿÿ´ÿÿíÿbÿôNN.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿiÿjBÿÿØÿÿiÿbBÿÿéÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.ÿ€Õv€ÿÿéÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿéÿbC  V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.d€Õv€ÿÿéÿb  6.G.V.j.}.Δ.£.¶.Ê.†.›...*.=.P.c.v.….ˇ.ÿÿüÿÿ ÿÿDÿÿ    hÿÿ
  643. ‘ÿÿ °ÿÿÿÿ$ÿÿHÿÿlÿÿΔÿÿ´ÿÿØÿÿüÿÿ ÿÿDÿÿ    hÿÿÿÿ$ÿÿHÿÿlÿÿΔÿÿ´ÿÿÿ¢CÿÿHASHÿÿBL~œœ
  644. œ–ço
  645. ÿ<&,=0    Q>v?˝@ÀA0 ‡
  646. ,Qv˝ À"å%1
  647. +/,T-y.ı/Ã0,2Q3v4˝5À6å7    
  648. 8    /9    T:    y;
  649. 0 ©U ≠©U#N !êN *˚¯i˝±i˛˚$∞¯i(≥¯i)∑˘'≤'
  650. @ÿ@‡eeoâéJLKUP    "
  651.  !'#+$()V5*,2g
  652. /%.-hB3iFj:60D;<8CE&471?=9QM>@ÿÿGAHJKIRWNLOMPSXeTZUY[\]kfl^_`amnbcdopqrstuvwxyz{|}~•™≠∞≥∑∫Ω√≈…—‘Ÿ⁄∂ΔŒ‚„‰ˆ˜˘˙˚˝˛ˇıƒ ¡¢£€¥œ§¨©ª«¬–®¯°±”“´µ¶·¸’º»π∏≤¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏ‹ÑÒÓÔÕÖ◊ØÙÚÛ܆fißàáâãä忉ÿÿ$NAMEDefault
  653. Default SSHeaderBodyFooterFootnoteFootnote Index  Heading1.H1$ HeadingH2.H2X HeadingH3.H3'Code.CV/Italic6Bullet8    ChecklisteNumbergClassic| Blue Gray 1… Blue Gray 2˘Colorfulœ
  654. 3D Table 1´
  655. 3D Table 2¿
  656. AccountingÈHarvardÕLegalàDiamonddÿÿDFNTM    HelveticaGenevaPalatino:H
  657. Letter Gothic
  658. 
  659. Zapf DingbatsETBL@FNTMnñCUTSnùDSUMoHDNIo.STYLo8ETBLºÿfl‡üûúùø›ñòóôõö÷